package org.lestr.secuel.m3ds;

public class Valeur {


    // Déclaration de constantes
    private static final long serialVersionUID = 1L;


    // Définition de constantes
    public static final int INT = 0;


    public static final int FLOAT = 1;


    public static final int DOUBLE = 2;


    public static final int STRING = 3;


    // Définition des attributs
    private int intVal;


    private float floatVal;


    private double doubleVal;


    private String stringVal;


    private int type;


    /** Constructeur */
    public Valeur() {


        // Instanciation des attributs
        intVal = 0;
        floatVal = 0;
        doubleVal = 0;
        stringVal = null;
        type = INT;

    }// FIN Constructeur


    /** Retourne le type de la valeur */
    public int getType() {

        return type;

    }// FIN getType


    /** Défini la valeur comme de type int et la définie */
    public void setInt(int x) {

        type = INT;
        intVal = x;

    }// FIN setInt


    /** Retourne la valeur si de type int */
    public int getInt() {

        return intVal;

    }// FIN getInt


    /** Défini la valeur comme de type float et la définie */
    public void setFloat(float x) {

        type = FLOAT;
        floatVal = x;

    }// FIN setFloat


    /** Retourne la valeur si de type float */
    public float getFloat() {

        return floatVal;

    }// FIN getFloat


    /** Défini la valeur comme de type double et la définie */
    public void setDouble(double x) {

        type = DOUBLE;
        doubleVal = x;

    }// FIN setDouble


    /** Retourne la valeur si de type double */
    public double getDouble() {

        return doubleVal;

    }// FIN getDouble


    /** Défini la valeur comme de type string et la définie */
    public void setString(String x) {

        type = STRING;
        stringVal = x;

    }// FIN setString


    /** Retourne la valeur si de type int */
    public String getString() {

        return stringVal;

    }// FIN getString


    /** Retourne un clone de la valeur */
    public Valeur clone() {

        // Variables locales
        Valeur rslt = new Valeur();

        // Construction du résultat
        rslt.intVal = intVal;
        rslt.floatVal = floatVal;
        rslt.doubleVal = doubleVal;
        rslt.stringVal = "" + stringVal;
        rslt.type = type;

        // Retour du résultat
        return rslt;

    }// FIN clone


    /** Retourne vrai si deux valeurs sont les mêmes */
    public boolean equals(Object autre) {

        if (autre instanceof Valeur)
            return (type == ((Valeur) autre).type) && ((type == DOUBLE && ((Valeur) autre).getDouble() == doubleVal)
                                                       || (type == FLOAT && ((Valeur) autre).getFloat() == floatVal)
                                                       || (type == INT && ((Valeur) autre).getInt() == intVal)
                                                       || (type == STRING && ((Valeur) autre).getString().equals(stringVal)));
        else
            return super.equals(autre);

    }// FIN equals


}// FIN Classe
